package cn.infrabase.token;

import cn.infrabase.CodeDescEnum;
import cn.infrabase.Errors;

/**
 * 令牌签名算法。
 *
 * @author Weimin Gao
 * @since 1.0.0
 **/
public enum TokenSignatureAlgorithm implements CodeDescEnum<String> {

	/**
	 * No digital signature
	 */
	NONE("NONE", "No digital signature"),

	/**
	 * HMAC using SHA-256
	 */
	HS256("HS256", "HMAC using SHA-256");

	private final String code;

	private final String desc;

	TokenSignatureAlgorithm(String code, String desc) {
		this.code = code;
		this.desc = desc;
	}

	@Override
	public String code() {
		return code;
	}

	@Override
	public String desc() {
		return desc;
	}


	/**
	 * 返回给定令牌签名算法代码对应的令牌签名算法枚举对象。
	 *
	 * @param code 令牌签名算法代码。
	 * @return 令牌签名算法枚举对象。
	 * @throws TokenException 如果给定的令牌签名算法代码不存在时。
	 */
	public static TokenSignatureAlgorithm codeOf(String code) throws TokenException {
		TokenSignatureAlgorithm[] values = TokenSignatureAlgorithm.values();
		for (TokenSignatureAlgorithm value : values) {
			if (value.code().equalsIgnoreCase(code)) {
				return value;
			}
		}
		throw new TokenException(Errors.TOKEN_SIGNATURE_ALGORITHM_NOT_SUPPORT, code);
	}

}
